/*
 * PropiedadBase.java
 *
 * Copyright 2011 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * Creado el 21/02/2010, 11:23:38 AM
 */

package com.ufps.cuatro.util.base;

import com.ufps.cuatro.modelo.representacion.Propiedad;
import java.util.ArrayList;

/**
 * <i><b>PropiedadBase:</b></i> Representa una Propiedad que se aplicará en la
 * creación de un Control Swing.
 * 
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 21/02/2010
 * @see ObjectBase
 */
public class PropiedadBase extends ObjectBase{
    private static final long serialVersionUID = -7506563793130771921L;
    
    private String name;
    private String alias;
    private String tooltips;
    private String set;
    private String get;
    private String requeridas;
    private int contexto;
    private boolean boolEditable;
    private boolean boolVacio;
    private ComponenteBaseStandar objComponente;    
    private ArrayList<ParametroPropiedadBase> objParametrosSet;
    private ArrayList<ParametroPropiedadBase> objParametrosGet;

    /**
     * Constructor utilizado en la Implementación.
     * @param id Indice de definición en el Archivo de Propiedades.
     * @param name Nombre de la Propiedad.
     * @param alias Nombre corto ó alias asociado a la Propiedad.
     * @param tooltips Mensaje informativo asociado a la Propiedad.
     * @param set Nombre del Método para editar el Valor la Propiedad.
     * @param get Nombre del Método para devolver el Valor la Propiedad.
     * @param requeridas Indices de Propiedades requeridas para aplicar antes de la Propiedad Actual.
     * @param objComponente Componente Padre al que pertenece la Propiedad.
     * @param contexto  
     */
    public PropiedadBase(int id, String name, String alias, String tooltips, String set, String get, String requeridas, int contexto, boolean boolEditable, boolean boolVacio, ComponenteBaseStandar objComponente) {
        this.id = id;
        this.name = name;
        this.alias = alias;
        this.tooltips = tooltips;
        this.set = set;
        this.get = get;
        this.requeridas = requeridas;
        this.contexto = contexto;
        this.boolEditable = boolEditable;
        this.boolVacio = boolVacio;
        this.objComponente = objComponente;
    }
    
    /**
     * 
     * @param id
     * @param name
     * @param alias
     * @param tooltips
     * @param set
     * @param get 
     * @param requeridas
     * @param contexto  
     */
    public PropiedadBase(int id, String name, String alias, String tooltips, String set, String get, String requeridas, int contexto, boolean boolEditable, boolean boolVacio) {
        this.id = id;
        this.name = name;
        this.alias = alias;
        this.tooltips = tooltips;
        this.set = set;
        this.get = get;
        this.requeridas = requeridas;
        this.contexto = contexto;
        this.boolEditable = boolEditable;
        this.boolVacio = boolVacio;
    }
    
    /**
     * Devuelve el boolean que determina si la propiedad es editable.
     * @return boolean que determina si la propiedad es editable.
     */
    public boolean isEditable() {
        return boolEditable;
    }

    /**
     * Establece el boolean que determina si la propiedad es editable.
     * @param boolean que determina si la propiedad es editable.
     */
    public void setEditable(boolean boolEditable) {
        this.boolEditable = boolEditable;
    }
    
    /**
     * Devuelve el boolean que determina si la propiedad puede ser vacia.
     * @return boolean que determina si la propiedad puede ser vacia.
     */
    public boolean isEmpty() {
        return boolVacio;
    }

    /**
     * Establece el boolean que determina si la propiedad puede ser vacia.
     * @param boolean que determina si la propiedad puede ser vacia.
     */
    public void setEmpty(boolean boolVacio) {
        this.boolVacio = boolVacio;
    }

    /**
     * Devuelve el Nombre corto ó alias asociado a la Propiedad.
     * @return Nombre corto ó alias asociado a la Propiedad.
     */
    public String getAlias() {
        return alias;
    }

    /**
     * Establece el Nombre corto ó alias asociado a la Propiedad.
     * @param alias Nombre corto ó alias asociado a la Propiedad.
     */
    public void setAlias(String alias) {
        this.alias = alias;
    }

    /**
     * Devuelve el Nombre de la Propiedad.
     * @return Nombre de la Propiedad.
     */
    public String getName() {
        return name;
    }

    /**
     * Establece el Nombre de la Propiedad.
     * @param name Nombre de la Propiedad.
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * Devuelve el <code>ComponenteBaseStandar</code> donde se aplicará la Propiedad.
     * @return <code>ComponenteBaseStandar</code> donde se aplicará la Propiedad.
     */
    public ComponenteBaseStandar getObjComponente() {
        return objComponente;
    }

    /**
     * Establece el <code>ComponenteBaseStandar</code> donde se aplicará la Propiedad.
     * @param objComponente <code>ComponenteBaseStandar</code> donde se aplicará la Propiedad.
     */
    public void setObjComponente(ComponenteBaseStandar objComponente) {
        this.objComponente = objComponente;
    }

    /**
     * Deveuvle los Indices de Propiedades requeridas para aplicar antes de la Propiedad Actual.
     * @return Indices de Propiedades requeridas para aplicar antes de la Propiedad Actual.
     */
    public String getRequeridas() {
        return requeridas;
    }

    /**
     * Establece los Indices de Propiedades requeridas para aplicar antes de la Propiedad Actual.
     * @param requeridas Indices de Propiedades requeridas para aplicar antes de la Propiedad Actual.
     */
    public void setRequeridas(String requeridas) {
        this.requeridas = requeridas;
    }

    /**
     * Devuelve el Nombre del Método para editar la Propiedad.
     * @return Nombre del Método para editar la Propiedad.
     */
    public String getSet() {
        return set;
    }

    /**
     * Establece el Nombre del Método para editar la Propiedad.
     * @param set Nombre del Método para editar la Propiedad.
     */
    public void setSet(String set) {
        this.set = set;
    }

    /**
     * Devuelve el Mensaje informativo asociado a la Propiedad.
     * @return Mensaje informativo asociado a la Propiedad.
     */
    public String getTooltips() {
        return tooltips;
    }

    /**
     * Establece el Mensaje informativo asociado a la Propiedad.
     * @param tooltips Mensaje informativo asociado a la Propiedad.
     */
    public void setTooltips(String tooltips) {
        this.tooltips = tooltips;
    }

    /**
     * 
     * @return
     */
    public int getContexto() {
        return contexto;
    }

    /**
     * 
     * @param contexto
     */
    public void setContexto(int contexto) {
        this.contexto = contexto;
    }

    /**
     * 
     * @return
     */
    public String getGet() {
        return get;
    }

    /**
     * 
     * @param get
     */
    public void setGet(String get) {
        this.get = get;
    }

    /**
     * 
     * @return
     */
    public ArrayList<ParametroPropiedadBase> getObjParametrosSet() {
        return objParametrosSet;
    }

    /**
     * 
     * @param objParametros
     */
    public void setObjParametrosSet(ArrayList<ParametroPropiedadBase> objParametros) {
        this.objParametrosSet = objParametros;
    }

    /**
     * 
     * @return
     */
    public ArrayList<ParametroPropiedadBase> getObjParametrosGet() {
        return objParametrosGet;
    }

    /**
     * 
     * @param objParametrosGet
     */
    public void setObjParametrosGet(ArrayList<ParametroPropiedadBase> objParametrosGet) {
        this.objParametrosGet = objParametrosGet;
    }
    
    public ParametroPropiedadBase getObjParametroDefault(int modo){
        try{
            return this.getObjParametro(0, modo);
        }catch(java.lang.NullPointerException ex){}
        return null;
    }
    
    public ParametroPropiedadBase getObjParametro(int index, int modo){
      try{
            if(modo == Propiedad.MODO_GET){
                return this.objParametrosGet.get(index);            
            }        
            else if(modo == Propiedad.MODO_SET){
                return this.objParametrosSet.get(index);            
            }
            return this.objParametrosSet.get(index);
        }catch(java.lang.NullPointerException ex){}
      return null;
    }
    
    @Override
    public String toString() {
       try{
            return "Propiedad Base: " + name;
        }catch(java.lang.NullPointerException ex){}
       return "";
    }

    @Override
    public int compareTo(Object o) {
        try{
            PropiedadBase obj = (PropiedadBase) o;
            if(this.id > obj.id)
                return 1;
            else if(this.id < obj.id)
                return -1;
            else
                return 0;
        }catch(java.lang.NullPointerException ex){}
        return 0;
    }

}
